/**
 * 自定义字典工具类
 */
import { getDictDataByType } from "@/api/car/dictData"
import { selectDictLabel } from "@/utils/ruoyi"

// 字典缓存
const dictCache = new Map()

/**
 * 获取字典数据
 * @param {String} dictType 字典类型
 * @returns {Promise} 字典数据数组
 */
export function getDictData(dictType) {
  return new Promise((resolve, reject) => {
    // 先从缓存中获取
    if (dictCache.has(dictType)) {
      resolve(dictCache.get(dictType))
      return
    }

    // 从API获取
    getDictDataByType(dictType).then(response => {
      const dictData = response.data || []
      // 缓存数据
      dictCache.set(dictType, dictData)
      resolve(dictData)
    }).catch(error => {
      console.error(`获取字典数据失败: ${dictType}`, error)
      reject(error)
    })
  })
}

/**
 * 根据字典值获取字典标签
 * @param {Array} dictList 字典数据列表
 * @param {String|Number} value 字典值
 * @returns {String} 字典标签
 */
export function getDictLabel(dictList, value) {
  if (!dictList || dictList.length === 0 || value === undefined || value === null) {
    return value || ''
  }
  
  // 如果dictList是数组，使用selectDictLabel函数
  if (Array.isArray(dictList)) {
    return selectDictLabel(dictList, value)
  }
  
  // 如果dictList是对象，直接查找
  const item = dictList.find(item => item.dictValue == value || item.value == value)
  return item ? (item.dictLabel || item.label) : value || ''
}

/**
 * 刷新所有字典数据缓存
 * @returns {Promise}
 */
export function refreshAllDictData() {
  return new Promise((resolve) => {
    dictCache.clear()
    console.log('字典缓存已清空')
    resolve()
  })
}

/**
 * 刷新指定字典数据缓存
 * @param {String} dictType 字典类型
 * @returns {Promise}
 */
export function refreshDictData(dictType) {
  return new Promise((resolve, reject) => {
    dictCache.delete(dictType)
    getDictData(dictType).then(resolve).catch(reject)
  })
}

/**
 * 获取字典选项
 * @param {String} dictType 字典类型
 * @returns {Promise} 格式化后的字典选项
 */
export function getDictOptions(dictType) {
  return getDictData(dictType).then(dictData => {
    return dictData.map(item => ({
      label: item.dictLabel,
      value: item.dictValue
    }))
  })
}

/**
 * 清空字典缓存 (别名函数)
 * @returns {Promise}
 */
export function clearDictCache() {
  return refreshAllDictData()
}
